#!/usr/bin/python
# -*- coding:utf-8 -*-
# @File    : 银行系统（面向过程实现）.py
# @Time    : 2021-08-02 20:55
# @Author  : Wenbin Lee
# @Contact : 1297792992(QQ)
# @Software: PyCharm

import os, pickle

def regist():
    user = input("请输入用户名:")
    user_file = user + '.db'
    if not os.path.isfile(user_file):
        pwd = input("请输入密码:")
        assets = int(input("第一次进入请输入现有资产:"))
        user_info = {'name': user, 'passwd': pwd, 'assets': assets}
        file_open(user_file, 'wb', user_info)
        print('注册成功')
    else:
        print('该用户已存在,请直接输入密码登录：\n')
        pwd = input("请输入密码:")
        login(user,pwd)

def login():
    user = input("请输入用户名:")
    pwd = input("请输入密码:")
    user_file = user + '.db'
    if os.path.isfile(user_file):
        dict_user = file_open(user_file, 'rb')
        if dict_user['name'] == user and dict_user['passwd'] == pwd:
            print('登录成功!')
            return dict_user['name'],dict_user['passwd'],dict_user['assets']
        else:
            print('错误：用户名密码错误。')
            return False
    else:
        print('该用户不存在,请先注册')#需要为您注册一个新账号吗？
        return False

def file_open(file, mode, *args):
    '''
    通过pickle序列化持久存储数据信息
    :param file: 不同的用户生成不同的数据文件，文件名+'.db'
    :param mode: 对数据文件的操作，读取还是写入
    :param args: 需要写入的数据信息
    :return: 返回读取数据文件的信息
    '''
    if mode == 'wb':
        data = args[0]
        with open(file, mode) as f:
            pickle.dump(data, f)
    elif mode == 'rb':
        with open(file, mode) as f:
            data = pickle.load(f)
            return data

def func_choose(user,pwd,assets):
    #首先获取银行的财产记录
    user_file = 'B_assets.db'
    if not os.path.isfile(user_file):
        B_assets = 50000
        user_info = {'B_assets': B_assets}
        file_open(user_file, 'wb', user_info)
    else:
        dict_user = file_open(user_file, 'rb')
        B_assets = dict_user['B_assets']

    while True:
        if B_assets < 0:
            print("不好意思，俺们银行破产了，请下次再来！")
            break

        print("欢迎进入您的账号！请输入序号来实现对应功能(直接输入管理员密码可以查看银行现有资产)\n")
        print('1. 取款\n'
              '2. 存款\n'
              '3. 查询\n'
              '4. 退出')
        choice = input()

        #取款
        if choice.upper() == '1':
            draw = int(input("请输入要取出的金额"))
            assets -= draw
            B_assets -= draw
        #存款
        elif choice.upper() == '2':
            Deposit = int(input("请输入要存入的金额"))
            assets += draw
            B_assets += draw
        #查询
        elif choice.upper() == '3':
            print("您的现存总资产为：",assets)
        elif choice.upper() == '4':
            break
        elif choice.upper() == '123456':
            print("银行现存总资产为：", B_assets)
        else:
            print("输入错误，请从'1','2','3'中任选其一输入！")

    #终了对账户余额进行修改
    user_file = user + '.db'
    if os.path.isfile(user_file):
        user_info = {'name': user, 'passwd': pwd, 'assets': assets}
        file_open(user_file, 'wb', user_info)
    #终了对银行余额进行修改
    user_file = 'B_assets.db'
    user_info = {'B_assets': B_assets}
    file_open(user_file, 'wb', user_info)

while True:
        print("欢迎进入李文彬的银行！请输入序号来实现对应功能\n")
        print('1. 注册\n'
              '2. 登录\n'
              '3. 退出')
        choice = input()

        #注册账号并确定初始金额
        if choice.upper() == '1':
            regist()
        #登录账号并充值
        elif choice.upper() == '2':
            user,pwd,assets = login()
            if assets != False:
                func_choose(user,pwd,assets)
        elif choice.upper() == '3':
            break
        else:
            print("输入错误，请从'1','2','3'中任选其一输入！")
